<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="format-detection" content="telephone=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="icon" href="/images/touxiang1.png?v=2.6.1" type="image/png" sizes="16x16"><link rel="icon" href="/images/touxiang1.png?v=2.6.1" type="image/png" sizes="32x32"><meta name="description" content="代码脚本       代码脚本的格式是：    &lt;%     java 语句     %&gt;代码脚本的作用是： 可以在 jsp 页面中， 编写我们自己需要的功能（写的是 java 语句） 。代码脚本的特点是：1、 代码脚本翻译之后都在_jspService 方法中2、 代码脚本由于翻译到_jspService()方法中， 所以在_jspServic">
<meta property="og:type" content="article">
<meta property="og:title" content="JSP 学习">
<meta property="og:url" content="https://gityang2016.gitee.io/2021/01/24/jsp_01/index.html">
<meta property="og:site_name" content="Yangj&#39;s blog">
<meta property="og:description" content="代码脚本       代码脚本的格式是：    &lt;%     java 语句     %&gt;代码脚本的作用是： 可以在 jsp 页面中， 编写我们自己需要的功能（写的是 java 语句） 。代码脚本的特点是：1、 代码脚本翻译之后都在_jspService 方法中2、 代码脚本由于翻译到_jspService()方法中， 所以在_jspServic">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://gityang2016.gitee.io/images/jsp/jsp1_duibi.png">
<meta property="og:image" content="https://gityang2016.gitee.io/images/jsp/jsp1_duixiang.png">
<meta property="og:image" content="https://gityang2016.gitee.io/images/jsp/out_print.png">
<meta property="og:image" content="https://gityang2016.gitee.io/images/jsp/dymicbaohan.png">
<meta property="article:published_time" content="2021-01-24T12:09:38.681Z">
<meta property="article:modified_time" content="2021-01-25T15:43:22.383Z">
<meta property="article:author" content="Yangj">
<meta property="article:tag" content="jsp">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://gityang2016.gitee.io/images/jsp/jsp1_duibi.png"><title>JSP 学习 | Yangj's blog</title><link ref="canonical" href="https://gityang2016.gitee.io/2021/01/24/jsp_01/"><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.12.1/css/all.min.css" type="text/css"><link rel="stylesheet" href="/css/index.css?v=2.6.1"><script>var Stun = window.Stun || {};
var CONFIG = {
  root: '/',
  algolia: undefined,
  assistSearch: undefined,
  fontIcon: {"prompt":{"success":"fas fa-check-circle","info":"fas fa-arrow-circle-right","warning":"fas fa-exclamation-circle","error":"fas fa-times-circle"},"copyBtn":"fas fa-copy"},
  sidebar: {"offsetTop":"20px","tocMaxDepth":6},
  header: {"enable":true,"showOnPost":true,"scrollDownIcon":true},
  postWidget: {"endText":true},
  nightMode: {"enable":true},
  back2top: {"enable":true},
  codeblock: {"style":"default","highlight":"light","wordWrap":false},
  reward: false,
  fancybox: false,
  zoomImage: {"gapAside":"20px"},
  galleryWaterfall: undefined,
  lazyload: false,
  pjax: undefined,
  externalLink: {"icon":{"enable":true,"name":"fas fa-external-link-alt"}},
  shortcuts: undefined,
  prompt: {"copyButton":"Copy","copySuccess":"Copy Success","copyError":"Copy Error"},
  sourcePath: {"js":"js","css":"css","images":"images"},
};

window.CONFIG = CONFIG;</script><meta name="generator" content="Hexo 5.3.0"><link rel="alternate" href="/atom.xml" title="Yangj's blog" type="application/atom+xml">
</head><body><div class="container" id="container"><header class="header" id="header"><div class="header-inner"><nav class="header-nav header-nav--fixed"><div class="header-nav-inner"><div class="header-nav-menubtn"><i class="fas fa-bars"></i></div><div class="header-nav-menu"><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/"><span class="header-nav-menu-item__icon"><i class="fas fa-home"></i></span><span class="header-nav-menu-item__text">Home</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/archives/"><span class="header-nav-menu-item__icon"><i class="fas fa-folder-open"></i></span><span class="header-nav-menu-item__text">Archives</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/categories/"><span class="header-nav-menu-item__icon"><i class="fas fa-layer-group"></i></span><span class="header-nav-menu-item__text">Categories</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/tags/"><span class="header-nav-menu-item__icon"><i class="fas fa-tags"></i></span><span class="header-nav-menu-item__text">Tags</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/aboutme/"><span class="header-nav-menu-item__icon"><i class="fas fa-user-tag"></i></span><span class="header-nav-menu-item__text">About</span></a></div></div><div class="header-nav-mode"><div class="mode"><div class="mode-track"><span class="mode-track-moon"></span><span class="mode-track-sun"></span></div><div class="mode-thumb"></div></div></div></div></nav><div class="header-banner"><div class="header-banner-info"><div class="header-banner-info__title">Yangj's blog</div><div class="header-banner-info__subtitle">It is never too late to mend</div></div><div class="header-banner-arrow"><div class="header-banner-arrow__icon"><i class="fas fa-angle-down"></i></div></div></div></div></header><main class="main" id="main"><div class="main-inner"><div class="content-wrap" id="content-wrap"><div class="content" id="content"><!-- Just used to judge whether it is an article page--><div id="is-post"></div><div class="post"><header class="post-header"><h1 class="post-title">JSP 学习</h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">Created</span><span class="post-meta-item__value">2021-01-24</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">Updated</span><span class="post-meta-item__value">2021-01-25</span></span></div></header><div class="post-body">
        <h2 id="代码脚本"   >
          <a href="#代码脚本" class="heading-link"><i class="fas fa-link"></i></a>代码脚本</h2>
      <p>代码脚本的格式是：<br><code>    &lt;%     java 语句     %&gt;</code><br>代码脚本的作用是： 可以在 jsp 页面中， 编写我们自己需要的功能（写的是 java 语句） 。<br>代码脚本的特点是：<br>1、 代码脚本翻译之后都在_jspService 方法中<br>2、 代码脚本由于翻译到_jspService()方法中， 所以在_jspService()方法中的现有对象都可以直接使用。<br>3、 还可以由多个代码脚本块组合完成一个完整的 java 语句。<br>4、 代码脚本还可以和表达式脚本一起组合使用， 在 jsp 页面上输出数据<br>翻译之后的对比：<br><img src="/images/jsp/jsp1_duibi.png"> </p>

        <h2 id="JSP-九大内置对象"   >
          <a href="#JSP-九大内置对象" class="heading-link"><i class="fas fa-link"></i></a>JSP 九大内置对象</h2>
      <p>jsp 中的内置对象， 是指 Tomcat 在翻译 jsp 页面成为 Servlet 源代码后， 内部提供的九大对象， 叫内置对象<br><img src="/images/jsp/jsp1_duixiang.png"> </p>

        <h2 id="jsp-四大域对象"   >
          <a href="#jsp-四大域对象" class="heading-link"><i class="fas fa-link"></i></a>jsp 四大域对象</h2>
      <style>
table th:nth-of-type(1){
width: 18%;
}
table th:nth-of-type(2){
width: 30%
;
}
table th:nth-of-type(3){
width: 60%;
}
</style>
<p>四个域对象分别是：</p>
<div class="table-container"><table>
<thead>
<tr>
<th align="center">对象</th>
<th align="center">实现类</th>
<th align="center">页面有效范围</th>
</tr>
</thead>
<tbody><tr>
<td align="center">pageContext</td>
<td align="center">PageContextImpl 类</td>
<td align="center">当前 jsp 页面范围内有效</td>
</tr>
<tr>
<td align="center">request</td>
<td align="center">HttpServletRequest 类</td>
<td align="center">一次请求内有效</td>
</tr>
<tr>
<td align="center">session</td>
<td align="center">HttpSession 类一个会话范围内有效</td>
<td align="center">（打开浏览器访问服务器， 直到关闭浏览器）</td>
</tr>
<tr>
<td align="center">application</td>
<td align="center">ServletContext 类</td>
<td align="center">整个 web 工程范围内都有效（只要 web 工程不停止， 数据都在）</td>
</tr>
</tbody></table></div>

        <h3 id="域对象"   >
          <a href="#域对象" class="heading-link"><i class="fas fa-link"></i></a>域对象</h3>
      <p>域对象是可以像Map一样存取数据的对象。<br>四个域对象功能一样。不同的是它们对数据的存取范围。<br>虽然四个域对象都可以存取数据。 在使用上它们是有优先顺序的。<br>四个域在使用的时候， 优先顺序分别是， 他们从小到大的范围的顺序。<br>pageContext —&gt; request —&gt;session —&gt; application</p>

        <h3 id="jsp中的out输出和response-getWriter-输出的区别"   >
          <a href="#jsp中的out输出和response-getWriter-输出的区别" class="heading-link"><i class="fas fa-link"></i></a>jsp中的out输出和response.getWriter 输出的区别</h3>
      <p>response 中表示响应， 我们经常用于设置返回给客户端的内容（输出）<br>out 也是给用户做输出使用的。<br><img src="/images/jsp/out_print.png"> </p>
<p>由于 jsp 翻译之后， 底层源代码都是使用 out 来进行输出， 所以一般情况下。 我们在 jsp 页面中统一使用 out 来进行输出。 避免打乱页面输出内容的顺序。<br>out.write() 输出字符串没有问题<br>out.print() 输出任意数据都没有问题（都转换成为字符串后调用的 write 输出）</p>

        <h3 id="jsp-的常用标签"   >
          <a href="#jsp-的常用标签" class="heading-link"><i class="fas fa-link"></i></a>jsp 的常用标签</h3>
      
        <h4 id="a-jsp-静态包含"   >
          <a href="#a-jsp-静态包含" class="heading-link"><i class="fas fa-link"></i></a>a)jsp 静态包含</h4>
      <p>示例说明：<br>&lt;%–<br>&lt;%@ include file=””%&gt; 就是静态包含<br>file 属性指定你要包含的 jsp 页面的路径<br>地址中第一个斜杠 / 表示为 <a href="http://ip:port/工程路径/">http://ip:port/工程路径/</a> 映射到代码的 web 目录<br>静态包含的特点：<br>1、 静态包含不会翻译被包含的 jsp 页面。<br>2、 静态包含其实是把被包含的 jsp 页面的代码拷贝到包含的位置执行输出。<br>–%&gt;</p>
<figure class="highlight plain"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;%@ include file&#x3D;&quot;&#x2F;include&#x2F;footer.jsp&quot;%&gt;</span><br></pre></td></tr></table></div></figure>

        <h4 id="b-jsp-动态包含"   >
          <a href="#b-jsp-动态包含" class="heading-link"><i class="fas fa-link"></i></a>b)jsp 动态包含</h4>
      <p>示例说明：<br>&lt;%–<br><code>&lt;jsp:include page=&quot;&quot;&gt;&lt;/jsp:include&gt;</code><br> 这是动态包含page 属性是指定你要包含的 jsp 页面的路径<br>动态包含也可以像静态包含一样。 把被包含的内容执行输出到包含位置<br>动态包含的特点：<br>1、 动态包含会把包含的 jsp 页面也翻译成为 java 代码<br>2、 动态包含底层代码使用如下代码去调用被包含的 jsp 页面执行输出。<br>JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false);<br>3、 动态包含， 还可以传递参数<br>–%&gt;</p>
<figure class="highlight"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&lt;jsp:include page=<span class="string">&quot;/include/footer.jsp&quot;</span>&gt;</span><br><span class="line"> &lt;jsp:param name=<span class="string">&quot;username&quot;</span> value=<span class="string">&quot;bbj&quot;</span>/&gt;</span><br><span class="line"> &lt;jsp:param name=<span class="string">&quot;password&quot;</span> value=<span class="string">&quot;root&quot;</span>/&gt;</span><br><span class="line">&lt;/jsp:include&gt;</span><br></pre></td></tr></table></div></figure>

        <h5 id="动态包含的底层原理："   >
          <a href="#动态包含的底层原理：" class="heading-link"><i class="fas fa-link"></i></a>动态包含的底层原理：</h5>
      <p><img src="/images/jsp/dymicbaohan.png"> </p>

        <h4 id="jsp-标签-转发"   >
          <a href="#jsp-标签-转发" class="heading-link"><i class="fas fa-link"></i></a>jsp 标签-转发</h4>
      <p>示例说明：<br>&lt;%–<br><code>&lt;jsp:forward page=&quot;&quot;&gt;&lt;/jsp:forward&gt;</code> 是请求转发标签， 它的功能就是请求转发<br>page 属性设置请求转发的路径<br>–%&gt;<br><code>&lt;jsp:forward page=&quot;/scope2.jsp&quot;&gt;&lt;/jsp:forward&gt;</code></p>

        <h2 id="什么是-Listener-监听器？"   >
          <a href="#什么是-Listener-监听器？" class="heading-link"><i class="fas fa-link"></i></a>什么是 Listener 监听器？</h2>
      <p>1、 Listener 监听器它是 JavaWeb 的三大组件之一。 JavaWeb 的三大组件分别是： Servlet 程序、 Filter 过滤器、 Listener 监听器。<br>2、 Listener 它是 JavaEE 的规范， 就是接口<br>3、 监听器的作用是， 监听某种事物的变化。 然后通过回调函数， 反馈给客户（程序） 去做一些相应的处理。<br>1.1、 ServletContextListener 监听器<br>ServletContextListener 它可以监听 ServletContext 对象的创建和销毁。<br>ServletContext 对象在 web 工程启动的时候创建， 在 web 工程停止的时候销毁。<br>监听到创建和销毁之后都会分别调用 ServletContextListener 监听器的方法反馈<br>如何使用 ServletContextListener 监听器监听 ServletContext 对象。<br>使用步骤如下：<br>    1、 编写一个类去实现 ServletContextListener<br>    2、 实现其两个回调方法<br>    3、 到 web.xml 中去配置监听器<br>监听器实现类：</p>
<figure class="highlight java"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyServletContextListenerImpl</span> <span class="keyword">implements</span> <span class="title">ServletContextListener</span> </span>&#123;</span><br><span class="line">	<span class="meta">@Override</span></span><br><span class="line">	<span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">contextInitialized</span><span class="params">(ServletContextEvent sce)</span> </span>&#123;</span><br><span class="line">	System.out.println(<span class="string">&quot;ServletContext 对象被创建了&quot;</span>);</span><br><span class="line">	&#125; </span><br><span class="line">	<span class="meta">@Override</span></span><br><span class="line">	<span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">contextDestroyed</span><span class="params">(ServletContextEvent sce)</span> </span>&#123;</span><br><span class="line">	System.out.println(<span class="string">&quot;ServletContext 对象被销毁了&quot;</span>);</span><br><span class="line">	&#125;</span><br><span class="line">&#125; </span><br></pre></td></tr></table></div></figure>
<p>web.xml 中的配置：</p>
<figure class="highlight xml"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&lt;!--配置监听器--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">listener</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">listener-class</span>&gt;</span>com.atguigu.listener.MyServletContextListenerImpl<span class="tag">&lt;/<span class="name">listener-class</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">listener</span>&gt;</span></span><br></pre></td></tr></table></div></figure></div><footer class="post-footer"><div class="post-ending ending"><div class="ending__text">------ END ------</div></div><div class="post-copyright copyright"><div class="copyright-author"><span class="copyright-author__name">Author: </span><span class="copyright-author__value"><a href="https://gityang2016.gitee.io">Yangj</a></span></div><div class="copyright-link"><span class="copyright-link__name">Link: </span><span class="copyright-link__value"><a href="https://gityang2016.gitee.io/2021/01/24/jsp_01/">https://gityang2016.gitee.io/2021/01/24/jsp_01/</a></span></div><div class="copyright-notice"><span class="copyright-notice__name">Copyright: </span><span class="copyright-notice__value">All articles in this blog are licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en" rel="external nofollow" target="_blank">BY-NC-SA</a> unless stating additionally</span></div></div><div class="post-tags"><span class="post-tags-item"><span class="post-tags-item__icon"><i class="fas fa-tag"></i></span><a class="post-tags-item__link" href="https://gityang2016.gitee.io/tags/jsp/">jsp</a></span></div><nav class="post-paginator paginator"><div class="paginator-prev"><a class="paginator-prev__link" href="/2021/01/27/mysql_01/"><span class="paginator-prev__icon"><i class="fas fa-angle-left"></i></span><span class="paginator-prev__text">MySQL_01</span></a></div><div class="paginator-next"><a class="paginator-next__link" href="/2021/01/23/hello-world/"><span class="paginator-prev__text">Hello World</span><span class="paginator-next__icon"><i class="fas fa-angle-right"></i></span></a></div></nav></footer></div></div></div><div class="sidebar-wrap" id="sidebar-wrap"><aside class="sidebar" id="sidebar"><div class="sidebar-nav"><span class="sidebar-nav-toc current">Catalog</span><span class="sidebar-nav-ov">Overview</span></div><section class="sidebar-toc"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BB%A3%E7%A0%81%E8%84%9A%E6%9C%AC"><span class="toc-number">1.</span> <span class="toc-text">
          代码脚本</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#JSP-%E4%B9%9D%E5%A4%A7%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1"><span class="toc-number">2.</span> <span class="toc-text">
          JSP 九大内置对象</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#jsp-%E5%9B%9B%E5%A4%A7%E5%9F%9F%E5%AF%B9%E8%B1%A1"><span class="toc-number">3.</span> <span class="toc-text">
          jsp 四大域对象</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%9F%9F%E5%AF%B9%E8%B1%A1"><span class="toc-number">3.1.</span> <span class="toc-text">
          域对象</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#jsp%E4%B8%AD%E7%9A%84out%E8%BE%93%E5%87%BA%E5%92%8Cresponse-getWriter-%E8%BE%93%E5%87%BA%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="toc-number">3.2.</span> <span class="toc-text">
          jsp中的out输出和response.getWriter 输出的区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#jsp-%E7%9A%84%E5%B8%B8%E7%94%A8%E6%A0%87%E7%AD%BE"><span class="toc-number">3.3.</span> <span class="toc-text">
          jsp 的常用标签</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#a-jsp-%E9%9D%99%E6%80%81%E5%8C%85%E5%90%AB"><span class="toc-number">3.3.1.</span> <span class="toc-text">
          a)jsp 静态包含</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#b-jsp-%E5%8A%A8%E6%80%81%E5%8C%85%E5%90%AB"><span class="toc-number">3.3.2.</span> <span class="toc-text">
          b)jsp 动态包含</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#%E5%8A%A8%E6%80%81%E5%8C%85%E5%90%AB%E7%9A%84%E5%BA%95%E5%B1%82%E5%8E%9F%E7%90%86%EF%BC%9A"><span class="toc-number">3.3.2.1.</span> <span class="toc-text">
          动态包含的底层原理：</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#jsp-%E6%A0%87%E7%AD%BE-%E8%BD%AC%E5%8F%91"><span class="toc-number">3.3.3.</span> <span class="toc-text">
          jsp 标签-转发</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BB%80%E4%B9%88%E6%98%AF-Listener-%E7%9B%91%E5%90%AC%E5%99%A8%EF%BC%9F"><span class="toc-number">4.</span> <span class="toc-text">
          什么是 Listener 监听器？</span></a></li></ol></section><!-- ov = overview--><section class="sidebar-ov hide"><div class="sidebar-ov-author"><div class="sidebar-ov-author__avatar"><img class="sidebar-ov-author__avatar_img" src="/images/touxiang2.jpg" alt="avatar"></div><p class="sidebar-ov-author__text">Storms make trees take deeper roots</p></div><div class="sidebar-ov-social"><a class="sidebar-ov-social-item" href="https://github.com/Gityang2016" target="_blank" rel="noopener" data-popover="Github" data-popover-pos="up"><span class="sidebar-ov-social-item__icon"><i class="fab fa-github"></i></span></a></div><div class="sidebar-ov-state"><a class="sidebar-ov-state-item sidebar-ov-state-item--posts" href="/archives/"><div class="sidebar-ov-state-item__count">6</div><div class="sidebar-ov-state-item__name">Archives</div></a><a class="sidebar-ov-state-item sidebar-ov-state-item--categories" href="/categories/"><div class="sidebar-ov-state-item__count">8</div><div class="sidebar-ov-state-item__name">Categories</div></a><a class="sidebar-ov-state-item sidebar-ov-state-item--tags" href="/tags/"><div class="sidebar-ov-state-item__count">5</div><div class="sidebar-ov-state-item__name">Tags</div></a></div><div class="sidebar-ov-cc"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en" target="_blank" rel="noopener" data-popover="Creative Commons" data-popover-pos="up"><img src="/images/cc-by-nc-sa.svg"></a></div></section><div class="sidebar-reading"><div class="sidebar-reading-info"><span class="sidebar-reading-info__text">You have read </span><span class="sidebar-reading-info__num">0</span><span class="sidebar-reading-info__perc">%</span></div><div class="sidebar-reading-line"></div></div></aside></div><div class="clearfix"></div></div></main><footer class="footer" id="footer"><div class="footer-inner"><div><span>Copyright © 2021</span><span class="footer__icon"><i class="fas fa-heart"></i></span><span>Gityang2016</span></div><div><span>Powered by <a href="http://hexo.io/" title="Hexo" target="_blank" rel="noopener">Hexo</a></span><span> v5.3.0</span><span class="footer__devider">|</span><span>Theme - <a href="https://github.com/liuyib/hexo-theme-stun/" title="Stun" target="_blank" rel="noopener">Stun</a></span><span> v2.6.1</span></div></div></footer><div class="loading-bar" id="loading-bar"><div class="loading-bar__progress"></div></div><div class="back2top" id="back2top"><span class="back2top__icon"><i class="fas fa-rocket"></i></span></div></div><script src="https://cdn.jsdelivr.net/npm/jquery@v3.4.1/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-animate@1.5.2/velocity.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-animate@1.5.2/velocity.ui.min.js"></script><script src="/js/utils.js?v=2.6.1"></script><script src="/js/stun-boot.js?v=2.6.1"></script><script src="/js/scroll.js?v=2.6.1"></script><script src="/js/header.js?v=2.6.1"></script><script src="/js/sidebar.js?v=2.6.1"></script></body></html>